package com.telsoft.hms.function;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader.Array;
import com.telsoft.hms.data.Widget_DATA;
import com.telsoft.hms.entity.AMObject;
import com.telsoft.hms.lib.security.session.Session;
import com.telsoft.hms.entity.ETT_Widget;
import com.telsoft.hms.util.SessionUtil;

public class FUNC_Widget {
	private final Widget_DATA widget_Data;

	public FUNC_Widget() {
		widget_Data = new Widget_DATA();
	}

	public AMObject[] getWidgetRightByUser(String strSecurityKey)
			throws Exception {
		try {
			Session session = SessionUtil.getSession(strSecurityKey);
			return  widget_Data.getWidgetRightByUser(session.getUserId(), session.getHospitalKey());
		}catch (Exception ex) {
			throw ex;
		}
	}

	/**
	 * ManhNT 7/10/2014 Phương thức lấy tất cả các Widget theo người dùng đã
	 * chọn
	 * 
	 */
	public ETT_Widget[] getAllWidget(String strSecurityKey)
			throws Exception {
		List<ETT_Widget> lstWidgetReturn = new ArrayList<>();
		try {
			Session session = SessionUtil.getSession(strSecurityKey);
			List<ETT_Widget> lstWidget = widget_Data.getAllWidget(
					session.getHospitalKey(), session.getUserId());
			// Values cua Widget có dạng "1:2:3"
			for (ETT_Widget tmp : lstWidget) {
				String[] value = tmp.getValue().split(":");
				ETT_Widget objWidget = new ETT_Widget();
				objWidget.setId(value[0]);
				objWidget.setPosition(value[1]);
				lstWidgetReturn.add(objWidget);
			}

		} catch (Exception ex) {
			throw ex;
		}
		return lstWidgetReturn.toArray(new ETT_Widget[lstWidgetReturn.size()]);
	}
	
	/**
	 * KienNT 7/10/2014 Phương thức cập nhật vị trí widget của người dùng
	 * 
	 */
	public boolean updateWidgetLocation(String strSecurityKey,
			List<ETT_Widget> lstWidget) throws Exception {
		// Position widget phải có định dạng \\d,\\d{1,2}
		for (int i = 0; i < lstWidget.size(); i++) {
			if (!Pattern.compile("\\d,\\d{1,2}").matcher(lstWidget.get(i).getPosition()).matches()) {
	            throw new Exception("ERR-0013");
	        }
		}

		try {
			Session session = SessionUtil.getSession(strSecurityKey);
			return widget_Data.updateWidgetLocation(session.getHospitalKey(),
					session.getUserId(), lstWidget);

		} catch (Exception ex) {
			throw ex;
		}
	}
}
